[小ネタ]「Fivetranのdbt Transformationで設定したスキーマとデータベース」と「dbtのyamlで定義したスキーマとデータベース」どちらが優先されるかを確かめてみた
さがらです。
小ネタですが、「Fivetranのdbt Transformationで設定したスキーマとデータベース」と「dbtのyamlで定義したスキーマとデータベース」どちらが優先されるかを確かめてみたので、その内容をまとめてみます。
前置き
Fivetranのdbt Transformationでは、設定を行う際に出力先のスキーマとデータベースを定義することができます。
また、dbtのyamlでも出力先のスキーマとデータベースを設定できます。
そこでふと、「この設定とFivetran上での設定、どちらが優先されるのか?」が気になったので試してみました。
前提条件
- dbtのバージョン:1.6.6 ※Fivetran上での設定
generate_schema_name
とgenerate_database_name
のマクロは、デフォルトから変更なし
結論:「dbtのyamlで定義したスキーマとデータベース」が優先される
ということで早速結論なのですが、「dbtのyamlで定義したスキーマとデータベース」が優先されます。
これは推測なのですが、Fivetranのdbt Transformationの設定に基づいて、裏側でdbt Coreに必須のprofile.yml
が作られるという挙動をしていそうですね。そのため、dbtのyamlでの設定した出力先が優先される、と解釈しています。
以下、やってみたことをまとめます。
検証内容
Fivetranのdbt Transformationと紐づけているリポジトリ上で、dbt_project.yml
を下記のようにします。
# yamlファイル全体から、変更箇所のみ抜粋 models: jaffle_shop: +database: sagara_dbt_test_db +schema: prod_from_dbtyaml staging: materialized: view mart: materialized: table
こうすると、以下のように出力先のデータベースとスキーマの設定が競合しているという状況になります。
- Fivetranのdbt Transformationの設定
- データベース:
sagara_dbt_demo_db
- スキーマ:
production
- データベース:
dbt_project.yml
の設定- データベース:
sagara_dbt_test_db
- スキーマ:
prod_from_dbtyaml
- データベース:
この状態で、このリポジトリと紐づいたdbt Transformationの処理をFivetranから実行してみます。
すると、dbt_project.yml
で設定したデータベースとスキーマに併せて出力がされました!(スキーマ名については、get_custom_schema.sql
のデフォルトの挙動に沿っているためこれで正しいです。)
最後に
簡単ではありましたが、「Fivetranのdbt Transformationで設定したスキーマとデータベース」と「dbtのyamlで定義したスキーマとデータベース」では、「dbtのyamlで定義したスキーマとデータベース」で定義した内容が優先されるということがわかりました!